package cn.seaboot.admin.reverse.service;

import cn.seaboot.admin.reverse.bean.DataColumn;
import cn.seaboot.admin.reverse.bean.DataTable;
import cn.seaboot.admin.reverse.dao.DataDao;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;

/**
 * 项目数据库结构查询
 *
 * @author ChenSS 2019年2月27日 下午3:05:21
 */
@Service
public class DataService {

    @Resource
    private DataDao dataDao;

    /**
     * 从information_schema表中获取系统的表结构信息
     *
     * @param schemaName 数据库名
     */
    public void initAllTableInfo(String schemaName) {
        dataDao.deleteTable(schemaName, null);
        dataDao.deleteColumn(schemaName, null);
        dataDao.initTable(schemaName, null);
        dataDao.initColumn(schemaName, null);
    }

    /**
     * 从information_schema表中获取系统的表结构信息
     *
     * @param schemaName 数据库名
     * @param tableName  表名，不传则更新所有表
     */
    public void initTableInfo(String schemaName, String tableName) {
        dataDao.deleteTable(schemaName, tableName);
        dataDao.deleteColumn(schemaName, tableName);
        dataDao.initTable(schemaName, tableName);
        dataDao.initColumn(schemaName, tableName);
    }

    /**
     * 查询数据库所有的表名
     *
     * @param schemaName 数据库名
     * @return listString
     */
    public List<String> queryTableName(String schemaName) {
        return dataDao.queryAllTableName(schemaName);
    }

    /**
     * 获取标准数据信息
     *
     * @param schemaName 数据库名
     * @return DbDataTables
     */
    public List<DataTable> queryAllDataTable(String schemaName) {
        List<DataTable> tables = dataDao.queryTables(schemaName);
        List<DataColumn> columns = dataDao.queryColumn(schemaName, null);
        for (DataColumn column : columns) {

            for (DataTable table : tables) {
                List<DataColumn> list = table.getColumns();
                if (list == null) {
                    list = new ArrayList<>();
                    table.setColumns(list);
                }

                if (column.getTableName().equals(table.getTableName())) {
                    list.add(column);
                }
            }
        }
        return tables;
    }

    /**
     * 获取标准数据信息
     *
     * @param schemaName 数据库名
     * @param tableName  表名
     * @return DbDataTables
     */
    public DataTable queryDataTable(String schemaName, String tableName) {
        DataTable tables = dataDao.queryTable(schemaName, tableName);
        if (tables != null) {
            List<DataColumn> columns = dataDao.queryColumn(schemaName, tableName);
            tables.setColumns(columns);
        }
        return tables;
    }
}
